package com.tiger.project.mapper;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.tiger.project.domain.ContractSponsor;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;


/**
 * 【合同发起】Mapper接口
 *
 * @author standard
 * @date 2022-09-22
 */
@Component
public interface ContractSponsorMapper {
    /**
     * 查询【合同发起】
     *
     * @param id 【合同发起】主键
     * @return 【合同发起】
     */
    public ContractSponsor selectContractSponsorById(Long id);

    /**
     * 查询【合同发起】列表
     *
     * @param contractSponsor 【合同发起】
     * @return 【合同发起】集合
     */
    public List<ContractSponsor> selectContractSponsorList(ContractSponsor contractSponsor);


    /**
     * 新增【合同发起】
     *
     * @param contractSponsor 【合同发起】
     * @return 结果
     */
    public int insertContractSponsor(ContractSponsor contractSponsor);

    /**
     * 修改【合同发起】
     *
     * @param contractSponsor 【合同发起】
     * @return 结果
     */
    public int updateContractSponsor(ContractSponsor contractSponsor);

    /**
     * 删除【合同发起】
     *
     * @param id 【合同发起】主键
     * @return 结果
     */
    public int deleteContractSponsorById(Long id);

    /**
     * 批量删除【合同发起】
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteContractSponsorByIds(Long[] ids);


    public List<Map<String, Object>> warningCount(@Param("letWay") String letWay,@Param("companyId") Long companyId);

    //合同过期时。押金管理类型为押金退费
    public int updateDepositType();

    /**
     * 合同名称校验
     */
    public List<ContractSponsor> nameCheck(@Param("deptId") Long deptId,@Param("assetName") String assetName,@Param("lesseeName") String lesseeName);

    /**
     * 未分配金额
     */
    public BigDecimal noAllotMoney(Long id);

    /**
     * 根据公司id查询合同和资产
     */
    public List<Map<String, Object>> selectContractSponsorJoinAssetByCompanyId(Long companyId);

    /**
     * 根据合同列表ids查询年度总计
     */
    public List<Map<String, Object>> selectContractSponsorListByIds(ArrayList<Integer> contractSponsorIds);

    /**
     * 合同关联的资产信息
     */
    List<ContractSponsor> selectByAssetId(@Param("assetId") Long assetId,@Param("deptId") Long deptId);

    List<Map<String, Object>> selectByMap(@Param("companyId") Long companyId,@Param("id") Long id);

    /**
     * (计租账面关联资产关联的合同租赁面积 x计租天数)
     */
    public Map<String, Object> selectRentalAreaMulDays(List<Integer> assetIds);

    /**
     * 总出租率: 已出租房源租租赁面积累加/总房源可租面积累加
     */
    public Map<String, Object> selectTotalLettingRate(Long companyId);

    /**
     * 总计租均价: 租金总额/∑(计租面积 x 计租天数)
     */
    public Map<String, Object> selectAverageRentalPrice(Long companyId);

    /**
     * 总平效: Σ日租金单价*计租天数/(总可出租面积 x 总时长)
     */
    public Map<String, Object> selectTotalUtilityEquality(Long companyId);

    /**
     * 账面平效排行榜
     */
    public List<Map<String, Object>> selectBookValueUtilityEqualityRanking(Long companyId);

    /**
     * 查询总可用面积
     */
    public Map<String, Object> selectTotalUsableArea(Long companyId);

    /**
     * 逾期金额 + 收缴率 + 逾期率 + 逾期金额占比
     */
    public Map<String, Object> selectRentCollection(Long companyId);

    /**
     * 开票金额和减免金额
     */
    public Map<String, Object> selectInvoiceAndCredit(Long companyId);

    /**
     * 逾期租客数量
     */
    public Map<String, Object> selectCountOverdueLessee(Long companyId);

    /**
     * 逾期租户比率
     */
    public Map<String, Object> selectCountOverdueLesseeRate(Long companyId);

    /**
     * 逾期率排名
     */
    public List<Map<String, Object>> selectOverdueLesseeRateRanking(Long companyId);

    /**
     * 逾期金额排名
     */
    public List<Map<String, Object>> selectOverdueLesseeAmountRanking(Long companyId);

    /**
     * 租户总已缴租金排名
     */
    public List<Map<String, Object>> selectCaptureLesseeAmountRanking(Long companyId);

    /**
     * 总效益流失率
     */
    public Map<String, Object> selectTotalRateOfLossOfBenefits(Long companyId);

    /**
     * 租金流失总额
     */
    public Map<String, Object> selectTotalRentLoss(Long companyId);

    /**
     * 创建时间排前10的合同
     */
    public List<ContractSponsor> selectTop10ByCreateAt(Long companyId);

    /**
     * 查询要导出excel表的数据
     */
    public List<Map<String, Object>> selectListByExportExcel(Long companyId);

    /**
     * 合同分类 + 出租类型
     */
    public List<Map<String, Object>> selectContractSponsorType(Long companyId);

    /**
     * 租金收缴 近12个月：待付（应收）
     */
    public List<Map<String, Object>> selectContractSponsorReceivable(Long companyId);

    /**
     * 租金收缴 近12个月：已收（实收）
     */
    public List<Map<String, Object>> selectContractSponsorReceipts(Long companyId);

    /**
     * 租金收缴 近12个月：减免
     */
    public List<Map<String, Object>> selectContractSponsorCredit(Long companyId);

    /**
     * 房屋、土地租金收入
     */
    public List<Map<String, Object>> selectIncome(Long companyId);

    /**
     * 查询出租面积+出租金额
     */
    public Map<String, Object> selectRentAreaAndMoney(Long companyId);

    /**
     * 查询出租率
     */
    public Map<String, Object> selectRentRate(Long companyId);

    /**
     * 查询收缴率
     */
    public Map<String, Object> selectCaptureRate(Long companyId);
}
